﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

using Epic.HandyExtensions;

namespace EpicFail.Core.Test
{
    [TestClass]
    public class FlagTypeExtensionsTest
    {
        [TestMethod]
        public void TestHas()
        {
            Assert.IsTrue(((byte)3).HasFlag((byte)0));
            Assert.IsTrue(((byte)3).HasFlag((byte)1));
            Assert.IsTrue(((byte)3).HasFlag((byte)2));
            Assert.IsTrue(((byte)3).HasFlag((byte)3));
            Assert.IsFalse(((byte)3).HasFlag((byte)4));

            Assert.IsTrue(((sbyte)3).HasFlag((sbyte)0));
            Assert.IsTrue(((sbyte)3).HasFlag((sbyte)1));
            Assert.IsTrue(((sbyte)3).HasFlag((sbyte)2));
            Assert.IsTrue(((sbyte)3).HasFlag((sbyte)3));
            Assert.IsFalse(((sbyte)3).HasFlag((sbyte)4));

            Assert.IsTrue(((short)3).HasFlag((short)0));
            Assert.IsTrue(((short)3).HasFlag((short)1));
            Assert.IsTrue(((short)3).HasFlag((short)2));
            Assert.IsTrue(((short)3).HasFlag((short)3));
            Assert.IsFalse(((short)3).HasFlag((short)4));

            Assert.IsTrue(((ushort)3).HasFlag((ushort)0));
            Assert.IsTrue(((ushort)3).HasFlag((ushort)1));
            Assert.IsTrue(((ushort)3).HasFlag((ushort)2));
            Assert.IsTrue(((ushort)3).HasFlag((ushort)3));
            Assert.IsFalse(((ushort)3).HasFlag((ushort)4));

            Assert.IsTrue((3).HasFlag(0));
            Assert.IsTrue((3).HasFlag(1));
            Assert.IsTrue((3).HasFlag(2));
            Assert.IsTrue((3).HasFlag(3));
            Assert.IsFalse((3).HasFlag(4));

            Assert.IsTrue((3u).HasFlag(0u));
            Assert.IsTrue((3u).HasFlag(1u));
            Assert.IsTrue((3u).HasFlag(2u));
            Assert.IsTrue((3u).HasFlag(3u));
            Assert.IsFalse((3u).HasFlag(4u));

            Assert.IsTrue((3l).HasFlag(0l));
            Assert.IsTrue((3l).HasFlag(1l));
            Assert.IsTrue((3l).HasFlag(2l));
            Assert.IsTrue((3l).HasFlag(3l));
            Assert.IsFalse((3l).HasFlag(4l));

            Assert.IsTrue((3ul).HasFlag(0ul));
            Assert.IsTrue((3ul).HasFlag(1ul));
            Assert.IsTrue((3ul).HasFlag(2ul));
            Assert.IsTrue((3ul).HasFlag(3ul));
            Assert.IsFalse((3ul).HasFlag(4ul));
        }
    }
}
